# Python *args 进阶教程：灵活参数，一网打尽
# 基础不牢谈何AI？今天钛妹继续深入学习Python的*args，务求彻底掌握，欢迎各位大佬指正！
# [钛妹]: 大家好！钛妹又来啦，上次学习了*args 的基本用法，感觉还是有点懵懂，今天想彻底搞明白它！

def args_advanced_example(normal_arg, *args):
    # [钛哥]:  钛妹好学！这次我们来个更全面的例子，`args_advanced_example` 函数，结合普通参数和 *args，展示更多用法。
    print("普通参数:", normal_arg) # 打印普通参数
    # [钛妹]:  嗯嗯，`normal_arg`  是普通参数，没问题，主要是想看 *args  还能怎么玩儿。
    print("收到的所有额外参数 (元组):", args) # 打印 *args 元组本身
    # [钛哥]:  注意！*args  接收到的所有参数，都会打包成一个元组 (tuple)。我们先打印看看这个元组长啥样。
    print("遍历 *args  打印每个参数:") # 提示开始遍历

    for index, arg in enumerate(args): # 使用 enumerate 获取索引和值
        # [钛哥]:  遍历 *args  是基本操作，这次我们用 `enumerate`  加个索引，看得更清楚。
        print(f"  参数索引 {index}:", arg) # 打印参数索引和值，使用 f-string
        # [钛妹]:  索引？就像给每个参数编个号，更清晰了！
    if args: # 再次检查 *args 是否为空
        # [钛哥]:  条件判断也少不了，根据 *args  是否为空，可以让函数执行不同逻辑。
        print("额外参数不为空，继续处理...") # 提示 *args 非空
        if all(isinstance(arg, int) for arg in args): # 检查是否所有参数都是整数
            # [钛哥]:  更进一步，我们可以检查 *args  里的参数类型。比如，判断是不是都是整数。
            sum_of_args = sum(args) # 如果都是整数，计算总和
            print("  所有额外参数都是整数，它们的总和是:", sum_of_args) # 打印整数总和
            # [钛妹]:  哇！还能检查参数类型？*args  比我想象的更强大！
        else:
            print("  并非所有额外参数都是整数，无法计算总和。") # 提示非整数情况
            # [钛哥]:  如果类型不符合预期，就给出相应的提示，保证程序的健壮性。
    else:
        print("没有收到任何额外参数。") # 提示 *args 为空
        # [钛妹]:  没有额外参数的情况也要考虑到，函数真是越来越完善了！
    print()
    
# 示例 1：只传入普通参数
args_advanced_example("只有一个主参数") # 只有普通参数
# [钛哥]:  先来个最简单的，只传普通参数，看看 *args  的表现。

# 示例 2：传入不同类型的额外参数
args_advanced_example("主参数在这", 1, "第二个", 3.14, [5, 6]) # 多种类型的额外参数
# [钛哥]:  这次多传几种类型的参数，字符串、整数、浮点数、列表，*args  都能接住。

# 示例 3：传入整数类型的额外参数
args_advanced_example("整数参数演示", 10, 20, 30, 40) # 都是整数的额外参数
# [钛哥]:  最后，来一组都是整数的额外参数，触发我们之前写的求和逻辑。

# [钛妹]:  哇！这次的例子好详细！*args  的各种用法都展示出来了，元组、遍历、类型判断，全都明白了！
# [钛哥]:  太棒了！*args  的核心就是收集和打包，掌握了这个，就能写出更灵活的 Python 函数。
# [钛妹]:  总结一下，*args  可以接收任意数量、任意类型的参数，并把它们变成一个元组，我们可以遍历和判断这个元组，实现更强大的功能！

print("好啦，这期内容到此结束，你是不是感觉又进步了一点点？点赞关注不迷路！")
# 好啦，这期内容到此结束，你是不是感觉又进步了一点点？点赞关注不迷路！